---
title: 回调函数
date: '2023-04-01 12:12:12'
tags: ['面试', 'javascript', '回调函数']
draft: false
summary: 回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数，当这个指针被用为调用它所指向的函数时，我们就说这是回调函数。回调函数不是由该函数的实现方直接调用，而是在特定的事件或条件发生时由另外的一方调用的，用于对该事件或条件进行响应。
---

1. 回调函数实现的机制是？

（1）定义一个回调函数；

（2）提供函数实现的一方在初始化的时候，将回调函数的函数指针注册给调用者；

（3）当特定的事件或条件发生的时候，调用者使用函数指针调用回调函数对事件进行处理。

2. 为什么要使用回调函数？

（1）因为可以把调用者与被调用者分开。调用者不关心谁是被调用者，所有它需知道的，只是存在一个具有某种特定原型、某些限制条件(如返回值为int)的被调用函数。

（2）回调函数在实际中的作用：先假设有这样一种情况，我们要编写一个库，它提供了某些排序算法的实现，如冒泡排序、快速排序、shell排序、shake排序等等，但为使库更加通用，不想在函数中嵌入排序逻辑，而让使用者来实现相应的逻辑;或者，想让库可用于多种数据类型(int、float、string)，此时，该怎么办呢？可以使用函数指针，并进行回调。

（3）回调可用于通知机制，例如，有时要在程序中设置一个计时器，每到一定时间，程序会得到相应的通知，但通知机制的实现者对我们的程序一无所知。而此时，就需有一个特定原型的函数指针，用这个指针来进行回调，来通知我们的程序事件已经发生。
